package com.ccys.db.vo.doctor.consultStage;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Author：XLY
 * @Date：2024/2/29 0029
 */
@Data
public class GetPastConsultationsDetailVo {


    @JsonProperty("consultation_type")
    private String consultationType;  //": "General Consultation",

    @JsonProperty("doctor_first_name")
    private String doctorFirstName;  //": "ayu-gp",

    @JsonProperty("doctor_last_name")
    private String doctorLastName;  //": "",

    @JsonProperty("consultant_begin_date")
    private String consultantBeginDate;  //": "2024-02-29T15:55:05",

    @JsonProperty("consultant_end_date")
    private String consultantEndDate;  //": "2024-02-29T15:55:05",

    @JsonProperty("medical_letter_code")
    private String medicalLetterCode;  //": "",

    @JsonProperty("medical_letter")
    private String medicalLetter;  //": "",

    @JsonProperty("need_medical_certification")
    private String needMedicalCertification;  //": false,

    @JsonProperty("medical_certification_code")
    private String medicalCertificationCode;  //": "",

    @JsonProperty("medical_certification_begin_date")
    private String medicalCertificationBeginDate;  //": null,

    @JsonProperty("medical_certification_end_date")
    private String medicalCertificationEndDate;  //": null,

    private String diagnosis;

    @JsonProperty("diagnosis_html")
    private String diagnosisHtml;

    @JsonProperty("diagnosis_checkbox")
    private String diagnosisCheckbox;

    @JsonProperty("presenting_complaint")
    private String presentingComplaint;   //": "wedwqewqeq",

    private String management;   //": "fghsfgdf",

    @JsonProperty("instructions_to_patient")
    private String instructionsToPatient;   //": "dfgsdfgsdfgd",

    @JsonProperty("booking_time_zone")
    private String bookingTimeZone;   //": "(GMT+8)",

    @JsonProperty("timezone_consultant_begin_date")
    private String timezoneConsultantBeginDate;   //": "2024-02-29T15:55:05",

    @JsonProperty("timezone_consultant_end_time")
    private String timezoneConsultantEndTime;   //": "2024-02-29T15:55:05",

    private SpecialistVo specialist;   //": null,

    private List<SymptomVo> symptoms;

    @JsonProperty("symptoms_photos")
    private List<SymptomPhotoVo> symptomsPhotos;

    private List<MedicationVo> medications;

    private List<AllergyVo> allergies;

    private List<PrescriptionVo> prescription;

    @JsonProperty("medical_service")
    private List<MedicalServiceVo> medicalService;

    @JsonProperty("product_packages")
    private List<ProductPackageVo> productPackages;

    private List<ReferralLetterVo> referrals;

    @JsonProperty("memo_info")
    private MemoInfoVo memoInfo;

    @JsonIgnore
    private String memo;  //":

    @JsonIgnore
    private String showMemo;  //": true,

    @JsonIgnore
    private List<MemoFileVo> memoFile;

    @Data
    public static class SymptomVo {
        private String name;
    }


    @Data
    public static class SymptomPhotoVo {
        private String photo;
    }


    @Data
    public static class MedicationVo {

        private String id;   //": "86c2fe8f-7442-46c4-9698-eae23da47c7f",

        private String name;   //": "(H) Bicords with Cream",

        @JsonProperty("usage_period")
        private String usagePeriod;   //": "1 week to 3 months",

        @JsonProperty("usage_period_id")
        private String usagePeriodId;   //": "d8d03afc-61cf-4976-85db-bd3502fd4966",

        @JsonProperty("amount_of_dosage")
        private String amountOfDosage;   //": "60"

    }

    @Data
    public static class AllergyVo {

        private String name;   //": "ADVAGRAF 1MG CAP 1'S",

        @JsonProperty("booking_allergies_id")
        private String bookingAllergiesId;   //": 88560,

        private String id;   //": "f54086df-24fe-4bea-b16f-90e851633930",

        private String index;   //": 1

    }


    @Data
    public static class PrescriptionVo {

        private String id;   //": "ca0f9468-df24-465b-97da-c2b36a2551b2",

        @JsonProperty("third_party_product_id")
        private String thirdPartyProductId;   //": null,

        private String name;   //": "Amoxycillin 500mg cap",

        @JsonProperty("ingredient_only")
        private String ingredientOnly;   //": "",

        @JsonProperty("name_only")
        private String nameOnly;   //": "Amoxycillin 500mg cap",

        @JsonIgnore
        private List<IngredientVo> ingredientList;

        private String quantity;   //": 2.0,

        private String price;   //": 500.0,

        private String amount;   //": 1000.0,

        @JsonProperty("patient_instruction")
        private String patientInstruction;   //": "patient_instruction",

        @JsonProperty("pharmacist_instruction")
        private String pharmacistInstruction;   //": "pharmacist_instruction",

        private String refill;   //": 0,

        @JsonProperty("refill_expiry_date")
        private String refillExpiryDate;   //": "",

        private String dosage;   //": 0,

        @JsonProperty("dosage_text")
        private String dosageText;   //": "DOSAGE",

        private String frequency;   //": "BD",

        @JsonProperty("what_is_for")
        private String whatIsFor;   //": "Antibiotics - For infection",

        @JsonProperty("causes_drowsiness")
        private String causesDrowsiness;   //": false,

        @JsonProperty("any_precautions")
        private String anyPrecautions;   //": "Take with food. May cause vomiting/diarrhoea. Complete course unless diarrhoea is severe.",

        @JsonProperty("unit_dosage_form")
        private String unitDosageForm;   //": null,

        private String duration;   //": 1.0,

        @JsonProperty("recommended_dosage")
        private String recommendedDosage;   //": "",

        @JsonProperty("recommended_frequency")
        private String recommendedFrequency;   //": "",

        @JsonProperty("recommended_no_of_tables")
        private String recommendedNoOfTables;   //": "",

        private String remarks;   //": "sdfsdfsdfs",

        @JsonProperty("per_tablet_dosage")
        private String perTabletDosage;   //": 0.0,

        @JsonProperty("pharmacy_id")
        private String pharmacyId;   //": null,

        @JsonProperty("pharmacy_name")
        private String pharmacyName;   //": null,

        @JsonProperty("formulation_name")
        private String formulationName;   //": "Capsule",

        @JsonProperty("route_doctor_name")
        private String routeDoctorName;   //": "Capsule",

        @JsonProperty("route_patient_name")
        private String routePatientName;   //": "Take",

        @JsonProperty("UOM_quantity")
        private String uomQuantity;   //": 1.00,

        private String prn;   //": false,

        @JsonProperty("prn_reason")
        private String prnReason;   //": "",

        private String unit;   //": 4,

        @JsonProperty("unit_name")
        private String unitName;   //": "capsule(s)",

        @JsonProperty("duration_unit")
        private String durationUnit;   //": 1,

        @JsonProperty("duration_unit_name")
        private String durationUnitName;   //": "day(s)",

        private String status;   //": "Non Selected",

        @JsonProperty("status_value")
        private String statusValue;   //": 0,

        @JsonProperty("is_in_exclusion_list")
        private String isInExclusionList;   //": 0,

        @JsonProperty("is_partner")
        private String isPartner;   //": false,

        @JsonProperty("quantity_fullfilled")
        private String quantityFullfilled;   //": 0,

        @JsonProperty("fulfilled_status")
        private String fulfilledStatus;   //": "",

        @JsonProperty("take_complete_course")
        private String takeCompleteCourse;   //: true,

        private String remark;     //": "sdfsdfsdfs"

        @JsonProperty("step_dose_medications")
        private List<PrescriptionVo> stepDoseMedications;
    }


    @Data
    public static class ReferralLetterVo {

        @JsonProperty("specialist_id")
        private String specialistId;   //": 7508,

        @JsonProperty("MDST_ID")
        private String mdstId;   //": 43,

        @JsonProperty("specialisation_type")
        private String specialisationType;   //": "General Surgery (Colorectal)",

        @JsonProperty("specialist_company_name")
        private String specialistCompanyName;   //": "TTK Panel",

        @JsonProperty("specialist_name")
        private String specialistName;   //": "TTK Specialist",

        @JsonProperty("specialist_mobile")
        private String specialistMobile;   //": "1232141223",

        @JsonProperty("specialist_clinic_name")
        private String specialistClinicName;   //": "TTK Clinic",

        @JsonProperty("specialist_address")
        private String specialistAddress;   //": "TTK address",

        @JsonProperty("referral_letter_text")
        private String referralLetterText;   //": "ewrsddg&nbsp; fGJOPFAJGDFSJG",

        @JsonProperty("referral_letter_code")
        private String referralLetterCode;   //": "ML16832052122561-A"

    }

    @Data
    public static class MemoInfoVo {

        private String memo;  //":

        @JsonProperty("show_memo")
        private String showMemo;  //": true,

        @JsonProperty("memo_file")
        private List<MemoFileVo> memoFile;

    }

    @Data
    public static class MemoFileVo {

        @JsonProperty("file_name")
        private String fileName;   //": "WC_16832052122561_1.png",

        @JsonProperty("file_byte")
        private String fileByte;   //": null,

        @JsonProperty("file_path")
        private String filePath;   //": "Consultation/Memo/WC_16832052122561_1.png",

        @JsonProperty("link_s3")
        private String linkS3;   //": "https://s3-ap-southeast-1.amazonaws.com/prv.staging.whitecoat.global/Consultation/Memo/WC_16832052122561_1.png?AWSAccessKeyId=AKIAIHBBQGPKQR7KO5BQ&Expires=1709800570&Signature=%2BB1MnrFYBzLda%2FsXgz%2F4U3kcJi8%3D"

    }

    @Data
    public static class MedicalServiceVo {

        private String nameadmin;   //": "HN Test HB % Test & again",

        private String namedisplay;   //": "HN Test HB % Test & again",

        private String price;   //": 6.0,

        private String shortdescription;   //": "Nay là HOME BASE ",

        private String longdescription;   //": "<p>jgfdgjlkdg</p>\n<p>gldfgjd</p>\n<p>gmlkdfgjfldg godfgodg dfgod</p>",

        private String categoryname;   //": "Additional Tests",

        private String providername;   //": "Medical Imaging Pte Ltd",

        @JsonProperty("status_value")
        private String statusValue;   //": 0,

        @JsonProperty("service_type")
        private String serviceType;   //": 1,

        @JsonProperty("test_period")
        private String testPeriod;   //": "1",

        @JsonProperty("test_period_unit")
        private String testPeriodUnit;   //": "week(s)"
    }


    @Data
    public static class ProductPackageVo {
        @JsonProperty("booking_service_id")
        private String bookingServiceId;    //": 9833,

        private String id;    //": "5e370f1a-5c08-496b-b2a7-0f51bf7c54e6",

        private String name;    //": "HBHS Test",

        private String price;    //": "6",

        private String quantity;    //": "1",

        private String type;    //": "Service",

        private List<PackageMedicationVo> medications;

        @JsonProperty("medical_services")
        private List<PackageMedicalServiceVo> medicalServices;

    }


    @Data
    public static class PackageMedicationVo{

        private String id;    //": "987b5c98-289e-408b-9340-64dd97ce9443",

        private String name;    //": "Khanh Sprint 20 - 3",

        private Integer quantity;    //": 1.0,

        private BigDecimal price;    //": 0,

        private BigDecimal amount;    //": 0,

        @JsonProperty("patient_instruction")
        private String patientInstruction;    //": "patient_instruction",

        @JsonProperty("pharmacist_instruction")
        private String pharmacistInstruction;    //": "pharmacist_instruction",

        private Integer refill;    //": 0,

        @JsonProperty("refill_expiry_date")
        private String refillExpiryDate;    //": "",

        private Integer dosage;    //": 0,

        @JsonProperty("dosage_text")
        private String dosageText;    //": "DOSAGE",

        private String frequency;    //": "AM & PM",

        @JsonProperty("frequency_description")
        private String frequencyDescription;    //": "Morning & Afternoon",

        @JsonProperty("what_is_for")
        private String whatIsFor;    //": "for khanh",

        @JsonProperty("causes_drowsiness")
        private boolean causesDrowsiness;    //": false,

        @JsonProperty("any_precautions")
        private String anyPrecautions;    //": "Khanh Sprint 20 - 3",

        @JsonProperty("unit_dosage_form")
        private String unitDosageForm;    //": null,

        private BigDecimal duration;    //": 1.0,

        @JsonProperty("recommended_dosage")
        private String recommendedDosage;    //": "",

        @JsonProperty("recommended_frequency")
        private String recommendedFrequency;    //": "",

        @JsonProperty("recommended_no_of_tables")
        private String recommendedNoOfTables;    //": "",

        private String remarks;    //": "",

        @JsonProperty("per_tablet_dosage")
        private BigDecimal perTabletDosage;    //": 0.0,

        @JsonProperty("pharmacy_id")
        private String pharmacyId;    //": null,

        @JsonProperty("pharmacy_name")
        private String pharmacyName;    //": null,

        @JsonProperty("formulation_name")
        private String formulationName;    //": "Tablet",

        @JsonProperty("route_doctor_name")
        private String routeDoctorName;    //": "PO-Tablet",

        @JsonProperty("route_patient_name")
        private String routePatientName;    //": "Take",

        @JsonProperty("UOM_quantity")
        private BigDecimal uomQuantity;    //": 8.00,

        private boolean prn;    //": false,

        @JsonProperty("prn_reason")
        private String prnReason;    //": "",

        private Integer unit;    //": 1,

        @JsonProperty("unit_name")
        private String unitName;    //": "pessary(ies)",

        @JsonProperty("duration_unit")
        private Integer durationUnit;    //": 1,

        @JsonProperty("duration_unit_name")
        private String durationUnitName;    //": "day(s)",

        private String status;    //": "Delivered",

        @JsonProperty("status_value")
        private Integer statusValue;    //": 3,

        @JsonProperty("booking_prescription_id")
        private String bookingPrescriptionId;    //": 49501,


        private boolean verified;    //": false,

        @JsonProperty("doctor_verify")
        private String doctorVerify;    //": null,

        @JsonProperty("doctor_name")
        private String doctorName;    //": "",

        @JsonProperty("step_dose")
        private String stepDose;    //": "",

        @JsonProperty("take_complete_course")
        private boolean takeCompleteCourse;    //": false,

        @JsonProperty("is_controlled")
        private boolean isControlled;    //": false

    }


    @Data
    public static class PackageMedicalServiceVo {

        private String id;   //": 617,

        private String nameadmin;   //": "24 hr Creatinine Clearance Test",

        private String namedisplay;   //": "24 hr Creatinine Clearance Test",

        private String price;   //": 0.0,

        private String countryid;   //": 203,

        private String categoryid;   //": 71,

        private String providerid;   //": 1,

        private String status;   //": true,

        private String shortdescription;   //": "",

        private String longdescription;   //": "",

        private String categoryname;   //": "Diabetic Profile",

        private String providername;   //": "Quest Laboratories Pte Ltd",

        @JsonProperty("package_id")
        private String packageId;   //": "5e370f1a-5c08-496b-b2a7-0f51bf7c54e6",

        @JsonProperty("service_type")
        private String serviceType;   //": 1

    }


    @Data
    public static class SpecialistVo{
        private String id;    //": "407",
        private String name;    //": "Doctor In Charge (Farrer Park Hospital)",
        private String mobile;    //": "+65 6363 1818",
        private String clinic_name;    //": "",
        private String address;    //": "1 Farrer Park Station Road, #02-01 Connexion, 217562",
        private String type;    //": "Anaesthesiology",
        private String type_id;    //": "572",
        private String companyName;    //": "WhiteCoat"
    }

    @Data
    public static class IngredientVo{


        private String name;

        private String dosage;

    }
}
